namespace Xamarin.Android.JniEnv
{
	partial class Generator
	{
		const   string          VersionsCategory                = "Versions";
		const   string          ClassesCategory                 = "Types";
		const   string          ExceptionsCategory              = "Exceptions";
		const   string          ReferencesCatgeory              = "References";
		const   string          ObjectOperationsCategory        = "Object";
		const   string          InstanceFieldsCategory          = "InstanceFields";
		const   string          StaticFieldsCategory            = "StaticFields";
		const   string          InstanceMethodsCategory         = "InstanceMethods";
		const   string          StaticMethodsCategory           = "StaticMethods";
		const   string          StringOperationsCategory        = "Strings";
		const   string          ArrayOperationsCategory         = "Arrays";
		const   string          NativeMethodsCategory           = "Types";
		const   string          MonitorOperationsCategory       = "Monitors";
		const   string          NIOSupportCategory              = "IO";
		const   string          ReflectionSupportCategory       = "Reflection";
		const   string          JavaVMCategory                  = "References";

		static readonly JniFunction[] JNIEnvEntries    = new JniFunction[]{
			new JniFunction {
				DeclaringType = VersionsCategory,
				Name          = "GetVersion",
				Visibility    = "internal",
				Prototype     = "jint        (*GetVersion)(JNIEnv*);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "DefineClass",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jclass      (*DefineClass)(JNIEnv*, const char, jobject, const jbyte*, jsize);",
				ReturnType    = new TypeInfo ("jclass"),
				Parameters    = new ParamInfo [] {new ParamInfo ("const char*", "name"), new ParamInfo ("jobject", "loader"), new ParamInfo ("const jbyte*", "buf"), new ParamInfo ("jsize", "bufLen")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "FindClass",
				ApiName       = "_FindClass",
				Visibility    = "internal",
				// Prebind       = true,
				Throws        = true,
				Prototype     = "jclass      (*FindClass)(JNIEnv*, const char*);",
				ReturnType    = new TypeInfo ("jclass"),
				Parameters    = new ParamInfo [] {new ParamInfo ("const char*", "classname")},
			},
			new JniFunction {
				DeclaringType = ReflectionSupportCategory,
				Name          = "FromReflectedMethod",
				Visibility    = "private",
				Prototype     = "jmethodID   (*FromReflectedMethod)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jmethodID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "method")},
			},
			new JniFunction {
				DeclaringType = ReflectionSupportCategory,
				Name          = "FromReflectedField",
				Visibility    = "private",
				Prototype     = "jfieldID    (*FromReflectedField)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jfieldID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "field")},
			},
			new JniFunction {
				DeclaringType = ReflectionSupportCategory,
				Name          = "ToReflectedMethod",
				Visibility    = "private",
				Prototype     = "jobject     (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "cls"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jboolean", "isStatic")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "GetSuperclass",
				Visibility    = "public",
				Prototype     = "jclass      (*GetSuperclass)(JNIEnv*, jclass);",
				ReturnType    = new TypeInfo ("jclass"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "IsAssignableFrom",
				Visibility    = "public",
				Prototype     = "jboolean    (*IsAssignableFrom)(JNIEnv*, jclass, jclass);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "clazz1"), new ParamInfo ("jclass", "clazz2")},
			},
			new JniFunction {
				DeclaringType = ReflectionSupportCategory,
				Name          = "ToReflectedField",
				Visibility    = "private",
				Prototype     = "jobject     (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "cls"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jboolean", "isStatic")},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "Throw",
				CustomWrapper = true,
				Visibility    = "public",
				// Throws        = true,
				Prototype     = "jint        (*Throw)(JNIEnv*, jthrowable);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jthrowable", "obj")},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "ThrowNew",
				CustomWrapper = true,
				Visibility    = "public",
				// Throws        = true,
				Prototype     = "jint        (*ThrowNew)(JNIEnv*, jclass, const char*);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "clazz"), new ParamInfo ("const char*", "message")},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "ExceptionOccurred",
				Visibility    = "public",
				Prototype     = "jthrowable  (*ExceptionOccurred)(JNIEnv*);",
				ReturnType    = new TypeInfo ("jthrowable"),
				Parameters    = new ParamInfo [] {},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "ExceptionDescribe",
				Visibility    = "public",
				Prototype     = "void        (*ExceptionDescribe)(JNIEnv*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "ExceptionClear",
				Visibility    = "public",
				Prototype     = "void        (*ExceptionClear)(JNIEnv*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "FatalError",
				Visibility    = "private",
				Prototype     = "void        (*FatalError)(JNIEnv*, const char*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("const char*", "msg")},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "_PushLocalFrame",
				CustomWrapper = true,
				Visibility    = "internal",
				Prototype     = "jint        (*PushLocalFrame)(JNIEnv*, jint);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jint", "capacity")},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "PopLocalFrame",
				Visibility    = "public",
				Prototype     = "jobject     (*PopLocalFrame)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "result", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "NewGlobalRef",
				CustomWrapper = true,
				Visibility    = "public",
				// Prebind       = true,
				Prototype     = "jobject     (*NewGlobalRef)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "DeleteGlobalRef",
				CustomWrapper = true,
				Visibility    = "public",
				Prototype     = "void        (*DeleteGlobalRef)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "DeleteLocalRef",
				CustomWrapper = true,
				Visibility    = "public",
				// Prebind       = true,
				Prototype     = "void        (*DeleteLocalRef)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "IsSameObject",
				Visibility    = "public",
				Prototype     = "jboolean    (*IsSameObject)(JNIEnv*, jobject, jobject);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "ref1", Modifier.CanBeNull), new ParamInfo ("jobject", "ref2", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "NewLocalRef",
				Visibility    = "private",
				Prototype     = "jobject     (*NewLocalRef)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "@ref", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "_EnsureLocalCapacity",
				CustomWrapper = true,
				Visibility    = "internal",
				Prototype     = "jint        (*EnsureLocalCapacity)(JNIEnv*, jint);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jint", "capacity")},
			},
			new JniFunction {
				DeclaringType = ObjectOperationsCategory,
				Name          = "AllocObject",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*AllocObject)(JNIEnv*, jclass);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass")},
			},
			new JniFunction {
				DeclaringType = ObjectOperationsCategory,
				Name          = "NewObject",
				CustomWrapper = true,
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*NewObject)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = ObjectOperationsCategory,
				Name          = "NewObjectV",
				CustomWrapper = true,
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jobject     (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = ObjectOperationsCategory,
				Name          = "NewObjectA",
				CustomWrapper = true,
				ApiName       = "NewObject",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "GetObjectClass",
				Visibility    = "public",
				Prototype     = "jclass      (*GetObjectClass)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jclass"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "IsInstanceOf",
				Visibility    = "public",
				Prototype     = "jboolean    (*IsInstanceOf)(JNIEnv*, jobject, jclass);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "clazz")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "GetMethodID",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);",
				ReturnType    = new TypeInfo ("jmethodID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "kls"), new ParamInfo ("const char*", "name"), new ParamInfo ("const char*", "signature")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallObjectMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallObjectMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallObjectMethodA",
				ApiName       = "CallObjectMethod",
				Throws        = true,
				Visibility    = "public",
				Prototype     = "jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallBooleanMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jboolean    (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallBooleanMethodA",
				ApiName       = "CallBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallByteMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jbyte       (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallByteMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jbyte       (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallByteMethodA",
				ApiName       = "CallByteMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jbyte       (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallCharMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jchar       (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallCharMethodA",
				ApiName       = "CallCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallShortMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jshort      (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallShortMethodA",
				ApiName       = "CallShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallIntMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jint        (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallIntMethodA",
				ApiName       = "CallIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallLongMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jlong       (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallLongMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jlong       (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallLongMethodA",
				ApiName       = "CallLongMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jlong       (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallFloatMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jfloat      (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallFloatMethodA",
				ApiName       = "CallFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallDoubleMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jdouble     (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallDoubleMethodA",
				ApiName       = "CallDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallVoidMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "void        (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallVoidMethodA",
				ApiName       = "CallVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualObjectMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualObjectMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jobject     (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualObjectMethodA",
				ApiName       = "CallNonvirtualObjectMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualBooleanMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jboolean    (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualBooleanMethodA",
				ApiName       = "CallNonvirtualBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualByteMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jbyte       (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualByteMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jbyte       (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualByteMethodA",
				ApiName       = "CallNonvirtualByteMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jbyte       (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualCharMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jchar       (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualCharMethodA",
				ApiName       = "CallNonvirtualCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualShortMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jshort      (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualShortMethodA",
				ApiName       = "CallNonvirtualShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualIntMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jint        (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualIntMethodA",
				ApiName       = "CallNonvirtualIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualLongMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jlong       (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualLongMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jlong       (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualLongMethodA",
				ApiName       = "CallNonvirtualLongMethod",
				Throws        = true,
				Visibility    = "public",
				Prototype     = "jlong       (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualFloatMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jfloat      (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualFloatMethodA",
				ApiName       = "CallNonvirtualFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualDoubleMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jdouble     (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualDoubleMethodA",
				ApiName       = "CallNonvirtualDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualVoidMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "void        (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = InstanceMethodsCategory,
				Name          = "CallNonvirtualVoidMethodA",
				ApiName       = "CallNonvirtualVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jclass", "jclass"), new ParamInfo ("jmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetFieldID",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfieldID    (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);",
				ReturnType    = new TypeInfo ("jfieldID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("const char*", "name"), new ParamInfo ("const char*", "sig")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetObjectField",
				Visibility    = "public",
				Prototype     = "jobject     (*GetObjectField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetBooleanField",
				Visibility    = "public",
				Prototype     = "jboolean    (*GetBooleanField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetByteField",
				Visibility    = "public",
				Prototype     = "jbyte       (*GetByteField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetCharField",
				Visibility    = "public",
				Prototype     = "jchar       (*GetCharField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetShortField",
				Visibility    = "public",
				Prototype     = "jshort      (*GetShortField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetIntField",
				Visibility    = "public",
				Prototype     = "jint        (*GetIntField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetLongField",
				Visibility    = "public",
				Prototype     = "jlong       (*GetLongField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetFloatField",
				Visibility    = "public",
				Prototype     = "jfloat      (*GetFloatField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "GetDoubleField",
				Visibility    = "public",
				Prototype     = "jdouble     (*GetDoubleField)(JNIEnv*, jobject, jfieldID);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetObjectField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jobject", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetBooleanField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jboolean", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetByteField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jbyte", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetCharField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jchar", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetShortField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jshort", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetIntField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jint", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetLongField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jlong", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetFloatField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jfloat", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = InstanceFieldsCategory,
				Name          = "SetDoubleField",
				ApiName       = "SetField",
				Visibility    = "public",
				Prototype     = "void        (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject"), new ParamInfo ("jfieldID", "jfieldID"), new ParamInfo ("jdouble", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "GetStaticMethodID",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jmethodID   (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);",
				ReturnType    = new TypeInfo ("jstaticmethodID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("const char*", "name"), new ParamInfo ("const char*", "sig")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticObjectMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticObjectMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jobject     (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticObjectMethodA",
				ApiName       = "CallStaticObjectMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticBooleanMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jboolean    (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticBooleanMethodA",
				ApiName       = "CallStaticBooleanMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jboolean    (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticByteMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jbyte       (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticByteMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jbyte       (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticByteMethodA",
				ApiName       = "CallStaticByteMethod",
				Throws        = true,
				Visibility    = "public",
				Prototype     = "jbyte       (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticCharMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jchar       (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticCharMethodA",
				ApiName       = "CallStaticCharMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jchar       (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticShortMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jshort      (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticShortMethodA",
				ApiName       = "CallStaticShortMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jshort      (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticIntMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jint        (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticIntMethodA",
				ApiName       = "CallStaticIntMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jint        (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticLongMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jlong       (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticLongMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jlong       (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticLongMethodA",
				ApiName       = "CallStaticLongMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jlong       (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticFloatMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jfloat      (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticFloatMethodA",
				ApiName       = "CallStaticFloatMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfloat      (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticDoubleMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jdouble     (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticDoubleMethodA",
				ApiName       = "CallStaticDoubleMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jdouble     (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticVoidMethodV",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "void        (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("va_list", "args")},
			},
			new JniFunction {
				DeclaringType = StaticMethodsCategory,
				Name          = "CallStaticVoidMethodA",
				ApiName       = "CallStaticVoidMethod",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticmethodID", "jmethod"), new ParamInfo ("jvalue*", "parms", true)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticFieldID",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jfieldID    (*GetStaticFieldID)(JNIEnv*, jclass, const char*, const char*);",
				ReturnType    = new TypeInfo ("jstaticfieldID"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("const char*", "name"), new ParamInfo ("const char*", "sig")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticObjectField",
				Visibility    = "public",
				Prototype     = "jobject     (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticBooleanField",
				Visibility    = "public",
				Prototype     = "jboolean    (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticByteField",
				Visibility    = "public",
				Prototype     = "jbyte       (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jbyte"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticCharField",
				Visibility    = "public",
				Prototype     = "jchar       (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jchar"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticShortField",
				Visibility    = "public",
				Prototype     = "jshort      (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jshort"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticIntField",
				Visibility    = "public",
				Prototype     = "jint        (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticLongField",
				Visibility    = "public",
				Prototype     = "jlong       (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticFloatField",
				Visibility    = "public",
				Prototype     = "jfloat      (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jfloat"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "GetStaticDoubleField",
				Visibility    = "public",
				Prototype     = "jdouble     (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);",
				ReturnType    = new TypeInfo ("jdouble"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID")},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticObjectField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jobject", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticBooleanField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jboolean", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticByteField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jbyte", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticCharField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jchar", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticShortField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jshort", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticIntField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jint", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticLongField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jlong", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticFloatField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jfloat", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StaticFieldsCategory,
				Name          = "SetStaticDoubleField",
				ApiName       = "SetStaticField",
				Visibility    = "public",
				Prototype     = "void        (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("jstaticfieldID", "jfieldID"), new ParamInfo ("jdouble", "val", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "NewString",
				CustomWrapper = true,
				Visibility    = "internal",
				Throws        = true,
				Prototype     = "jstring     (*NewString)(JNIEnv*, const jchar*, jsize);",
				ReturnType    = new TypeInfo ("jstring"),
				Parameters    = new ParamInfo [] {new ParamInfo (new TypeInfo ("const jchar*", "IntPtr"), "unicodeChars"), new ParamInfo ("jsize", "len")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringLength",
				Visibility    = "internal",
				Prototype     = "jsize       (*GetStringLength)(JNIEnv*, jstring);",
				ReturnType    = new TypeInfo ("jsize"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringChars",
				Visibility    = "internal",
				Prototype     = "const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);",
				ReturnType    = new TypeInfo ("const jchar*", "IntPtr"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "ReleaseStringChars",
				Visibility    = "internal",
				Prototype     = "void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo (new TypeInfo ("const jchar*", "IntPtr"), "chars")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "NewStringUTF",
				Visibility    = "private",
				Throws        = true,
				Prototype     = "jstring     (*NewStringUTF)(JNIEnv*, const char*);",
				ReturnType    = new TypeInfo ("jstring"),
				Parameters    = new ParamInfo [] {new ParamInfo ("const char*", "bytes")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringUTFLength",
				Visibility    = "private",
				Prototype     = "jsize       (*GetStringUTFLength)(JNIEnv*, jstring);",
				ReturnType    = new TypeInfo ("jsize"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringUTFChars",
				Visibility    = "private",
				Prototype     = "const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);",
				ReturnType    = new TypeInfo ("const char*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "ReleaseStringUTFChars",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo ("const char*", "utf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetArrayLength",
				CustomWrapper = true,
				Visibility    = "public",
				Prototype     = "jsize       (*GetArrayLength)(JNIEnv*, jarray);",
				ReturnType    = new TypeInfo ("jsize"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jarray", "array_ptr")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewObjectArray",
				ApiName       = "NewArray",
				CustomWrapper = true,
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);",
				ReturnType    = new TypeInfo ("jobjectArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length"), new ParamInfo ("jclass", "elementClass"), new ParamInfo ("jobject", "initialElement", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetObjectArrayElement",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobjectArray", "array"), new ParamInfo ("jsize", "index")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetObjectArrayElement",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobjectArray", "array"), new ParamInfo ("jsize", "index"), new ParamInfo ("jobject", "value", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewBooleanArray",
				CustomWrapper = true,
				Visibility    = "public",
				Prototype     = "jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jbooleanArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewByteArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jbyteArray  (*NewByteArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jbyteArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewCharArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jcharArray  (*NewCharArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jcharArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewShortArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jshortArray (*NewShortArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jshortArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewIntArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jintArray   (*NewIntArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jintArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewLongArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jlongArray  (*NewLongArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jlongArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewFloatArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jfloatArray (*NewFloatArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jfloatArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "NewDoubleArray",
				ApiName       = "NewArray",
				Visibility    = "public",
				Prototype     = "jdoubleArray (*NewDoubleArray)(JNIEnv*, jsize);",
				ReturnType    = new TypeInfo ("jdoubleArray"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jsize", "length")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetBooleanArrayElements",
				Visibility    = "private",
				Prototype     = "jboolean*   (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);",
				ReturnType    = new TypeInfo ("jboolean*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbooleanArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetByteArrayElements",
				Visibility    = "private",
				Prototype     = "jbyte*      (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);",
				ReturnType    = new TypeInfo ("jbyte*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbyteArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetCharArrayElements",
				Visibility    = "private",
				Prototype     = "jchar*      (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);",
				ReturnType    = new TypeInfo ("jchar*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jcharArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetShortArrayElements",
				Visibility    = "private",
				Prototype     = "jshort*     (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);",
				ReturnType    = new TypeInfo ("jshort*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jshortArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetIntArrayElements",
				Visibility    = "private",
				Prototype     = "jint*       (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);",
				ReturnType    = new TypeInfo ("jint*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jintArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetLongArrayElements",
				Visibility    = "private",
				Prototype     = "jlong*      (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);",
				ReturnType    = new TypeInfo ("jlong*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jlongArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetFloatArrayElements",
				Visibility    = "private",
				Prototype     = "jfloat*     (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);",
				ReturnType    = new TypeInfo ("jfloat*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jfloatArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetDoubleArrayElements",
				Visibility    = "private",
				Prototype     = "jdouble*    (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);",
				ReturnType    = new TypeInfo ("jdouble*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jdoubleArray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseBooleanArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbooleanArray", "array"), new ParamInfo ("jboolean*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseByteArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray, jbyte*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbyteArray", "array"), new ParamInfo ("jbyte*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseCharArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseCharArrayElements)(JNIEnv*, jcharArray, jchar*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jcharArray", "array"), new ParamInfo ("jchar*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseShortArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseShortArrayElements)(JNIEnv*, jshortArray, jshort*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jshortArray", "array"), new ParamInfo ("jshort*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseIntArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseIntArrayElements)(JNIEnv*, jintArray, jint*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jintArray", "array"), new ParamInfo ("jint*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseLongArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseLongArrayElements)(JNIEnv*, jlongArray, jlong*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jlongArray", "array"), new ParamInfo ("jlong*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseFloatArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray, jfloat*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jfloatArray", "array"), new ParamInfo ("jfloat*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleaseDoubleArrayElements",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray, jdouble*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jdoubleArray", "array"), new ParamInfo ("jdouble*", "elems"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetBooleanArrayRegion",
				Visibility    = "internal",
				Throws        = true,
				Prototype     = "void        (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray, jsize, jsize, jboolean*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbooleanArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jboolean*", "byte[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetByteArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetByteArrayRegion)(JNIEnv*, jbyteArray, jsize, jsize, jbyte*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbyteArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jbyte*", "byte[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetCharArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetCharArrayRegion)(JNIEnv*, jcharArray, jsize, jsize, jchar*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jcharArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jchar*", "char[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetShortArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetShortArrayRegion)(JNIEnv*, jshortArray, jsize, jsize, jshort*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jshortArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jshort*", "short[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetIntArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetIntArrayRegion)(JNIEnv*, jintArray, jsize, jsize, jint*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jintArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jint*", "int[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetLongArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetLongArrayRegion)(JNIEnv*, jlongArray, jsize, jsize, jlong*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jlongArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jlong*", "long[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetFloatArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetFloatArrayRegion)(JNIEnv*, jfloatArray, jsize, jsize, jfloat*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jfloatArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jfloat*", "float[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetDoubleArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray, jsize, jsize, jdouble*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jdoubleArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("jdouble*", "double[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetBooleanArrayRegion",
				Visibility    = "internal",
				Throws        = true,
				Prototype     = "void        (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray, jsize, jsize, const jboolean*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbooleanArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jboolean*", "byte[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetByteArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetByteArrayRegion)(JNIEnv*, jbyteArray, jsize, jsize, const jbyte*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jbyteArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jbyte*", "byte[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetCharArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetCharArrayRegion)(JNIEnv*, jcharArray, jsize, jsize, const jchar*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jcharArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jchar*", "char[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetShortArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetShortArrayRegion)(JNIEnv*, jshortArray, jsize, jsize, const jshort*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jshortArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jshort*", "short[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetIntArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetIntArrayRegion)(JNIEnv*, jintArray, jsize, jsize, const jint*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jintArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jint*", "int[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetLongArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetLongArrayRegion)(JNIEnv*, jlongArray, jsize, jsize, const jlong*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jlongArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jlong*", "long[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetFloatArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetFloatArrayRegion)(JNIEnv*, jfloatArray, jsize, jsize, const jfloat*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jfloatArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jfloat*", "float[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "SetDoubleArrayRegion",
				ApiName       = "CopyArray",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "void        (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray, jsize, jsize, const jdouble*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jdoubleArray", "array"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo (new TypeInfo ("const jdouble*", "double[]"), "buf")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "RegisterNatives",
				Visibility    = "internal",
				// Prebind       = true,
				Throws        = true,
				Prototype     = "jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*, jint);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass"), new ParamInfo ("const JNINativeMethod*", "methods"), new ParamInfo ("jint", "nMethods")},
			},
			new JniFunction {
				DeclaringType = ClassesCategory,
				Name          = "UnregisterNatives",
				Visibility    = "private",
				Prototype     = "jint        (*UnregisterNatives)(JNIEnv*, jclass);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jclass", "jclass")},
			},
			new JniFunction {
				DeclaringType = MonitorOperationsCategory,
				Name          = "MonitorEnter",
				Visibility    = "private",
				Prototype     = "jint        (*MonitorEnter)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj")},
			},
			new JniFunction {
				DeclaringType = MonitorOperationsCategory,
				Name          = "MonitorExit",
				Visibility    = "private",
				Prototype     = "jint        (*MonitorExit)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj")},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "GetJavaVM",
				Visibility    = "internal",
				// Prebind       = true,
				Prototype     = "jint        (*GetJavaVM)(JNIEnv*, JavaVM**);",
				ReturnType    = new TypeInfo ("jint"),
				Parameters    = new ParamInfo [] {new ParamInfo ("JavaVM**", "vm")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringRegion",
				Visibility    = "private",
				Prototype     = "void        (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "str"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo ("jchar*", "buf")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringUTFRegion",
				Visibility    = "private",
				Prototype     = "void        (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "str"), new ParamInfo ("jsize", "start"), new ParamInfo ("jsize", "len"), new ParamInfo ("char*", "buf")},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "GetPrimitiveArrayCritical",
				Visibility    = "private",
				Prototype     = "void*       (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);",
				ReturnType    = new TypeInfo ("void*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jarray", "array"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ArrayOperationsCategory,
				Name          = "ReleasePrimitiveArrayCritical",
				Visibility    = "private",
				Prototype     = "void        (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jarray", "array"), new ParamInfo ("void*", "carray"), new ParamInfo ("jint", "mode")},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "GetStringCritical",
				Visibility    = "private",
				Prototype     = "const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);",
				ReturnType    = new TypeInfo ("const jchar*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo ("jboolean*", "isCopy", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = StringOperationsCategory,
				Name          = "ReleaseStringCritical",
				Visibility    = "private",
				Prototype     = "void        (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jstring", "@string"), new ParamInfo ("const jchar*", "carray")},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "NewWeakGlobalRef",
				CustomWrapper = true,
				Visibility    = "internal",
				Prototype     = "jweak       (*NewWeakGlobalRef)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jweak"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "obj", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "DeleteWeakGlobalRef",
				CustomWrapper = true,
				Visibility    = "public",
				Prototype     = "void        (*DeleteWeakGlobalRef)(JNIEnv*, jweak);",
				ReturnType    = new TypeInfo ("void"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jweak", "jobject", Modifier.CanBeNull)},
			},
			new JniFunction {
				DeclaringType = ExceptionsCategory,
				Name          = "ExceptionCheck",
				Visibility    = "private",
				Prototype     = "jboolean    (*ExceptionCheck)(JNIEnv*);",
				ReturnType    = new TypeInfo ("jboolean"),
				Parameters    = new ParamInfo [] {},
			},
			new JniFunction {
				DeclaringType = NIOSupportCategory,
				Name          = "NewDirectByteBuffer",
				Visibility    = "public",
				Throws        = true,
				Prototype     = "jobject     (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);",
				ReturnType    = new TypeInfo ("jobject"),
				Parameters    = new ParamInfo [] {new ParamInfo ("void*", "address"), new ParamInfo ("jlong", "capacity")},
			},
			new JniFunction {
				DeclaringType = NIOSupportCategory,
				Name          = "GetDirectBufferAddress",
				Visibility    = "public",
				Prototype     = "void*       (*GetDirectBufferAddress)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("void*"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "buf")},
			},
			new JniFunction {
				DeclaringType = NIOSupportCategory,
				Name          = "GetDirectBufferCapacity",
				Visibility    = "public",
				Prototype     = "jlong       (*GetDirectBufferCapacity)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jlong"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "buf")},
			},
			new JniFunction {
				DeclaringType = ReferencesCatgeory,
				Name          = "GetObjectRefType",
				CustomWrapper = true,
				Visibility    = "internal",
				Prototype     = "jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);",
				ReturnType    = new TypeInfo ("jobjectRefType"),
				Parameters    = new ParamInfo [] {new ParamInfo ("jobject", "jobject")},
			},
		};
	}
}
